簡單來說可以「用3種角度」來看~~~
白話「不同角度」有不同角度(記憶體/讀取方式/程式語言)資料結構的定義
白話來說Python的「List列表」不是陣列(Array)也不是連結串列(Linked List)
這2張圖說明各種資料結構及演算法的各種操作Big O時間複雜度https://www.bigocheatsheet.com/
列表 (List): 一種有序的元素集合,可以包含不同類型的資料
元組 (Tuple): 類似於列表,但是元組的元素是不可修改的
集合 (Set): 一種無序的元素集合,不包含重複的元素
字典 (Dictionary): 一種鍵值對的集合,可以通過鍵來快速訪問對應的值
矩陣 (Matrix): 可以使用numpy庫來處理多維陣列
表格 (DataFrame): 可以使用pandas庫來處理CSV/Excel或SQL數據表
明天來說說Python這6個重要重要超級重要的資料結構你才能學好Python
使用Python列表(List)實作陣列(Array)、連結串列(Linked List)、堆疊(Stack)、佇列(Queue)
# 陣列(Array)
class MyArray:
def __init__(self):
self.array = []
def insert(self, element):
self.array.append(element)
def get_element(self, index):
return self.array[index]
def delete_element(self, index):
del self.array[index]
my_array = MyArray()
my_array.insert(1)
my_array.insert(2)
my_array.insert(3)
print(my_array.get_element(1))
my_array.delete_element(0)
print(my_array.get_element(0))
# 連結串列(Linked List)
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
return
current = self.head
while current.next:
current = current.next
current.next = new_node
my_linked_list = LinkedList()
my_linked_list.append(1)
my_linked_list.append(2)
my_linked_list.append(3)
# 堆疊(Stack) 先進後出(LIFO)
class Stack:
def __init__(self):
self.stack = []
def push(self, element):
self.stack.append(element)
def pop(self):
if self.stack:
return self.stack.pop()
else:
return None
my_stack = Stack()
my_stack.push(1)
my_stack.push(2)
my_stack.push(3)
print(my_stack.pop())
# 佇列(Queue) 先進先出(FIFO)
class Queue:
def __init__(self):
self.queue = []
def enqueue(self, element):
self.queue.append(element)
def dequeue(self):
if self.queue:
return self.queue.pop(0)
else:
return None
my_queue = Queue()
my_queue.enqueue(1)
my_queue.enqueue(2)
my_queue.enqueue(3)
print(my_queue.dequeue())